package com.example.smartstart.controller;

import com.example.smartstart.entity.Award;
import com.example.smartstart.entity.MapPoint;
import com.example.smartstart.model.MyResponseData;
import com.example.smartstart.model.Result;
import com.example.smartstart.service.IAwardService;
import com.example.smartstart.service.impl.AwardServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author dlx
 * @since 2024-07-22
 */
@RestController
@RequestMapping("award/")
public class AwardController {

    @Autowired
    private IAwardService iAwardService;

    @PostMapping("addOrUpdate")
    public Result addOrUpdate(Award award){
        Boolean result = iAwardService.saveOrUpdate(award);
        if (result){
            return Result.success();
        }else {
            return Result.error("操作失败");
        }
    }

    // 删除奖品
    @PostMapping("delete")
    public MyResponseData deleteMorePoint(Integer[] ids){
        int row = iAwardService.deleteMoreAward(ids);
        MyResponseData data = new MyResponseData();
        if (row>=1){
            data.setErrorCode(0);
            data.setMessage("success");
            data.setArg1(row);
        }else {
            data.setErrorCode(1);
            data.setMessage("error");
        }
        return data;
    }

    // 分页查询所有奖品
    @GetMapping("listByPage")
    public MyResponseData listByPage(Award award){
        MyResponseData data = new MyResponseData();
        data.setErrorCode(0);
        data.setMessage("success");
        int row = iAwardService.queryTotal(award);
        System.out.println(row);
        data.setArg1(iAwardService.queryTotal(award));
        data.setList(iAwardService.listByPage(award));
        return data;
    }

    // 兑换奖品
    @PostMapping("exchangeAward")
    public Result exchangeAward(Integer id){

        try {
            iAwardService.exchangeAward(id);
            return Result.success();
        } catch (AwardServiceImpl.InsufficientPointsException e) {
            // 捕获InsufficientPointsException并返回相应的响应
            return Result.error("积分不足，兑换失败");
        } catch (AwardServiceImpl.InsufficientStockException e) {
            // 捕获InsufficientStockException并返回相应的响应
            return Result.error("库存不足，兑换失败");
        } catch (RuntimeException e) {
            // 捕获其他运行时异常（包括从performActionWithPointsCheck抛出的未捕获的异常）
            // 注意：这里可能会捕获到多种类型的运行时异常，你可以根据需要进一步细分处理
            // 但通常，对于未预料的异常，返回500 Internal Server Error是合适的
            // 你还可以选择记录这个异常到日志中
            return Result.error("服务器内部错误");
        }
    }
}
